package com.ht.api.task;

import javax.sql.DataSource;

import com.ht.api.db.Db;
import com.ht.api.db.DbConfig;
import com.ht.api.db.DbList;
import com.ht.api.db.Entity;
import com.ht.api.db.StreamLoadConfig;
import com.ht.api.db.task.HtTaskExecutor;
import com.ht.api.db.task.TaskHandler;
import com.ht.api.service.TagService;

import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;

/**
 * 处理租户的规则标签
 * @author asq
 * @createTime 2025年2月8日 15:47:42
 */
@Slf4j
public class TagTimerTask implements TaskHandler{

	@Override
	public String getName() {
		return "处理租户的规则标签";
	}

	@Override
	public boolean handler(JSONObject requestParam, String groupId, long taskId) {
		DbList list = Db.createSqlParser("sys_tenant").query();
		list.stream().forEach(b -> {
			HtTaskExecutor.execute(() -> {
				Long tenantId = b.getLong("main_id");
				doTagTask(tenantId);
			});
		});
		
		return true;
	}
	
	private void doTagTask(long tenantId) {
		log.info("[TenantTagTask]执行租户tag任务开始，租户ID:{}", tenantId);
		DataSource ds = DbConfig.tenantDSMap.get(tenantId);
        StreamLoadConfig config = DbConfig.useTenantSLC(tenantId);

        // 获取规则标签
        DbList taglist = Db.createSqlParser("tag").where("tag_type", 2).where("status", 1).where("init_status", 2).query(ds);

        // 循环规则标签，并检查是否有需要变化的标签对象，并做相关维护
        for (Entity tag : taglist) {
            TagService.refreshTag(ds, config, tag);
        }

		log.info("[TenantTagTask]执行租户tag任务结束，租户ID:{}", tenantId);
	}



}
